//class Student {
//    public String name;
//    public int age;
//
//    public Student(String name, int age) {
//        this.name = name;
//        this.age = age;
//    }
//}

public class Test {
    public static void main(String[] args) {
        String s = "abcdef";
        //如果参数为0，则返回原数组，若参数为其他，则返回新数组
        String str = s.substring(1);
        System.out.println(str);

        String str2 = s.substring(1, 4);//[1, 4) 左闭右开区间
        System.out.println(str2);

        System.out.println("====================");

        String ss = "        abc 666            ";
        System.out.println(ss);
        //去掉字符串两边空格
        String ss1 = ss.trim();
        System.out.println(ss1);
    }




    /**
     * 拆分字符串！！！==================================================================
     * @param args
     */
    public static void main10(String[] args) {
        String s = "woshi tiancai";
        //需要用数组接收返回值
        String[] str = s.split(" ");
        for (int i = 0; i < str.length; i++) {
            System.out.println(str[i]);
        }
        //自己决定分割几段（做不到平均分割，从前往后，割到段数就停止）
        String s1 = "hello woshi tiancai";
        String[] str1 = s1.split(" ", 2);
        for (int i = 0; i < str1.length; i++) {
            System.out.println(str1[i]);
        }

        //特殊符号需要使用转义字符
        String s2 = "1999/09/09";
        String[] str2 = s2.split("\\/");
        for (int i = 0; i < str2.length; i++) {
            System.out.println(str2[i]);
        }

        //多个分隔符，使用|进行连接
        System.out.println("====================");
        String s3 = "hello 1999/09/09";
        String[] str3 = s3.split(" |\\/");
        for (int i = 0; i < str3.length; i++) {
            System.out.println(str3[i]);
        }
        System.out.println("====================");

        //多次分割
        String s4 = "hello world&hello java";
        String[] str4 = s4.split("&");
        for (int i = 0; i < str4.length; i++) {
            System.out.println(str4[i]);

            String[] ss = str4[i].split(" ");
            for (int j = 0; j < ss.length; j++) {
                System.out.println(ss[j]);
            }
        }
    }





    /**
     * 字符串替换！！！==========================================================
     * @param args
     */
    public static void main9(String[] args) {
        String s = "ababcabcdabcde";
        //替换操作，字符串替换字符串，并不会在原有字符串上进行改动，生成新的字符串
        String s1 = s.replace("ab", "=");
        System.out.println(s1);
        //字符替换字符
        String s2 = s.replace('a', 'o');
        System.out.println(s2);
        //只替换第一次出现的位置
        String s3 = s.replaceFirst("ab", "o");
        System.out.println(s3);
        //替换全部
        String s4 = s.replaceAll("ab", "xy");
        System.out.println(s4);
    }


    /**
     * 字符串转换！！！=================================================================
     * @param args
     */
    public static void main8(String[] args) {
        //字符串转数组
        String s = "hello";
        char[] array = s.toCharArray();
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
        System.out.println();
        //数组转字符串
        String s1 = new String(array);
        System.out.println(s1);

        //格式化输出
        String s2 = String.format("%d/%d/%d", 1999, 9, 9);
        System.out.println(s2);
    }

    public static void main7(String[] args) {
        String s = "AbCdEFg";
        //大小写转换
        //注意：转换之后，生成了一个新的字符串，并没有在原有字符串上进行改变
        System.out.println(s.toUpperCase()); //ABCDEFG
        System.out.println(s.toLowerCase()); //abcdefg
    }

    public static void main6(String[] args) {
        //数字转字符串
        String s1 = String.valueOf(66);
        String s2 = String.valueOf(66.6);
        String s3 = String.valueOf(true);
//        String s4 = String.valueOf(new Student("小王", 20));
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
//        System.out.println(s4);

        //字符串转数字
        int a = Integer.parseInt("66");
        double b = Double.parseDouble("66.66");
        System.out.println(a);
        System.out.println(b);
    }





    /**
     * 字符串查找！！！========================================================================
     * @param args
     */
    public static void main5(String[] args) {
        String str = "abcdefabcdef";
        //charAt返回值类型为char，返回的是下标位置的值；不要越界，越界报错
        char ch = str.charAt(3);
        System.out.println(ch); //d

        //indexOf:返回值为int，返回第一次出现的位置，没有返回-1
        int x = str.indexOf('d');
        System.out.println(x); //3

        //indexOf:返回值为int，返回第一个字符 第一次出现的位置，没有返回-1
        int y = str.indexOf("cd");
        System.out.println(y); //2

        //indexOf:返回值为int，从fromIndex下标开始寻找，没有返回-1
        int z = str.indexOf('d', 6);
        System.out.println(z); //9

        //indexOf:返回值为int，从fromIndex下标开始寻找，返回第一个字符 第一次出现的位置，没有返回-1
        int i = str.indexOf("cd", 6);
        System.out.println(i); //8
        System.out.println("==========================");
        String str2 = "ababcabcdabcde";

        //lastIndexOf:返回值为int，从后往前找第一次出现的位置，返回下标，没有返回-1
        int a = str2.lastIndexOf('d');
        System.out.println(a); //12

        //lastIndexOf:返回值为int，从fromIndex位置开始，从后往前找第一次出现的位置，返回下标，没有返回-1
        int c = str2.lastIndexOf('d', 10);
        System.out.println(c); //8

        //lastIndexOf:返回值为int，从后往前找 第一个字符 第一次出现的位置，返回下标，没有返回-1
        int b = str2.lastIndexOf("cd");
        System.out.println(b); //11

        //lastIndexOf:返回值为int，从fromIndex位置开始，从后往前找 第一个字符 第一次出现的位置，返回下标，没有返回-1
        int d = str2.lastIndexOf("cd", 10);
        System.out.println(d); //7
    }





    /**
     * 字符串比较！！！========================================================
     * @param args
     */
    public static void main4(String[] args) {
        String str1 = "ABC";
        String str2 = "abc";
        System.out.println(str1.compareToIgnoreCase(str2)); //0
    }
    public static void main33(String[] args) {
        String str1 = "abc";
        String str2 = "acccc";
        System.out.println(str1.compareTo(str2));
        /**
         * 1.字符串长度相同时，返回值为第一个不同字符的差值
         * 2.字符串长度不同时，若最短长度的内容均相同，返回值为长度的差值
         * 3.字符串长度不同时，若最短长度的内容不同，返回值为第一个不同字符的差值
         */
    }

    public static void main3(String[] args) {
        String str1 = "abcaaa";
        String str2 = "abc";
        System.out.println(str1.compareTo(str2)); //3:str1.length() - str2.length()
    }


    public static void main2(String[] args) {
        String str1 = new String("hello");
        String str2 = new String("hello");
        System.out.println(str1 == str2);
        System.out.println(str1.equals(str2));
        System.out.println("=======================");
        String str3 = "world";
        String str4 = "world";
        System.out.println(str3 == str4); //有关常量池知识，以后介绍
    }

    public static void main222(String[] args) {
        int a = 10;
        int b = 10;
        int c = 20;
        System.out.println(a == b);
        System.out.println(a == c);
    }

    public static void main111(String[] args) {
        String str = "hello";
        System.out.println(str);
        System.out.println(str.length());
        System.out.println("hello".length());

        System.out.println(str.isEmpty()); //判断元素是否为空：String str = "";
        String str2 = null; //指向为空
        System.out.println(str2.isEmpty()); //error


//        String str1 = new String("world");
//        System.out.println(str1);
//
//        char[] array = {'a', 'b', 'c'}; //字符数组
//        String str2 = new String(array);
//        System.out.println(str2);
    }

    public static void main1(String[] args) {
        //使用字符串直接构造
        String s1 = "hello";
        System.out.println(s1);

        //通过new关键字进行构造
        String s2 = new String("world");
        System.out.println(s2);

        //使用字符数组进行构造
        char[] array = new char[]{'a', 'b', 'c', 'd', 'e'};
        String s3 = new String(array);
        System.out.println(s3);
    }
}
